package com.gch.programa.managed;

import com.gch.programa.modelo.Programa;
import com.gch.programa.logica.GestorPrograma;
import com.gch.programa.modelo.TipoBusqueda;
import com.gch.programa.util.GCH;
import java.io.Serializable;
import java.util.List;
import java.util.ResourceBundle;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

/**
 *
 * @author GrupoPrograma
 */
@ManagedBean(name = "programaBean")
public class ProgramaBean implements Serializable {

    private ResourceBundle rb;
    private FacesMessage fm;
    
    private GestorPrograma gestorPrograma = new GestorPrograma();
    private List<Programa> lstProgramas;
    private Programa programa = new Programa();
    private String titulo;
    private String descripcion;
    private int tipoBusqueda;

    @PostConstruct
    public void init() {
        lstProgramas = gestorPrograma.listarTodos();
    }

    public ProgramaBean() {
        
        LoginBean loginBean = (LoginBean) FacesContext.getCurrentInstance().
		getExternalContext().getSessionMap().get("loginBean");
        
        rb = ResourceBundle.getBundle("com.gch.programa.i18n.global-messages",
                loginBean.getLocale());
    }

    public String listar() {
        GCH.dump("listar cantidad", gestorPrograma.listarTodos().size());
        lstProgramas = gestorPrograma.listarTodos();
        return "/view/programa/index";
    }

    public String guardar() {

        GCH.dump("listando programa", programa);
        gestorPrograma.modificarPorCodigo(getPrograma());
        fm = new FacesMessage(rb.getString("gch_programa_exito_editar"));
        FacesContext.getCurrentInstance().addMessage(null, fm);
        return this.listar();

    }

    public String buscar() {
        GCH.dump("tipoBusqueda", tipoBusqueda);
        if (TipoBusqueda.Completa == TipoBusqueda.obtenerPorCodigo(getTipoBusqueda())) {
            if (getTitulo() == null || getTitulo().isEmpty()) {
                fm = new FacesMessage(rb.getString("gch_programa_error_titulo_vacio"));
                FacesContext.getCurrentInstance().addMessage(null, fm);
            }

            if (getDescripcion() == null || getDescripcion().isEmpty()) {
                fm = new FacesMessage(rb.getString("gch_programa_error_descripcion_vacio"));
                FacesContext.getCurrentInstance().addMessage(null, fm);

            }
            return null;
        } else {
            if (getTitulo() == null || (getTitulo().isEmpty() && getDescripcion().isEmpty())) {
                fm = new FacesMessage(rb.getString("gch_programa_error_tituloydescripcion_vacio"));
                FacesContext.getCurrentInstance().addMessage(null, fm);
                return null;
            }
        }

        TipoBusqueda tipoBusquedaEnum = TipoBusqueda.obtenerPorCodigo(getTipoBusqueda());
        lstProgramas = gestorPrograma.listarSegun(getTitulo(), getDescripcion(), tipoBusquedaEnum);
        return "/view/programa/index";
    }

    public String registrar() {
        GCH.dump("codigo", programa.getCodigo());
        Programa p = gestorPrograma.consultarPorCodigo(programa.getCodigo());
        if (p != null) { // si ya existe , mostramos mensajes de validacion.
            fm = new FacesMessage(rb.getString("gch_programa_error_codigo_duplicado"));
            FacesContext.getCurrentInstance().addMessage(null, fm);
            return null;
        } else { // si no existe , lo registramos
            GCH.dump("registrar:Programa", programa);
            gestorPrograma.registrar(programa);

            fm = new FacesMessage(rb.getString("gch_programa_exito_registrar"));
            FacesContext.getCurrentInstance().addMessage(null, fm);
            return this.listar();
        }
    }

    public String nuevo() {
        return "/view/programa/nuevo";
    }

    public void eliminar(Programa programa) {
        
        String codigo = programa.getCodigo();
        GCH.dump("eliminar:codigo", codigo);
        Programa p = gestorPrograma.consultarPorCodigo(codigo);
        if (p == null) {
            fm = new FacesMessage(rb.getString("gch_programa_error_noexiste"));
        } else {
            gestorPrograma.eliminarPorCodigo(codigo);
            fm = new FacesMessage(rb.getString("gch_programa_exito_eliminar"));
        }
        FacesContext.getCurrentInstance().addMessage(null, fm);
    }

    public String editar(Programa programa) {
        setPrograma(programa);
        return "/view/programa/editar";
    }

    // Metodos de acceso de los JavaBeans.
    public List<Programa> getLstProgramas() {
        return lstProgramas;
    }

    public void setLstProgramas(List<Programa> lstProgramas) {
        this.lstProgramas = lstProgramas;
    }

    public GestorPrograma getGestorPrograma() {
        return gestorPrograma;
    }

    public void setGestorPrograma(GestorPrograma gestorPrograma) {
        this.gestorPrograma = gestorPrograma;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public int getTipoBusqueda() {
        return tipoBusqueda;
    }

    public void setTipoBusqueda(int tipoBusqueda) {
        this.tipoBusqueda = tipoBusqueda;
    }

    public Programa getPrograma() {
        return programa;
    }

    public void setPrograma(Programa programa) {
        this.programa = programa;
    }
}
